import java.util.List;

/**
 * 虚拟节点分布算法
 * @author xhf
 */
public interface IDistribution {
    /**
     * 计算哈希值
     * @param key 待计算的key
     * @return 哈希值
     */
    int hash(String key);
    /**
     * 添加物理节点
     * @param nodes 物理节点列表
     */
    void addNodes(List<Node> nodes);
    /**
     * 移除物理节点
     * @param nodes 物理节点列表
     */
    void removeNodes(List<Node> nodes);

    /**
     * 搜索可使用的物理节点
     * @param key 目标key
     * @return 目标物理节点
     */
    Node search(String key);

    /**
     * 虚拟节点列表，用于统计等用
     * @return 分布情况
     */
    List<VirtualNode> getVirtualNodes();
}
